﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Evolution.Common;
using ComponentFactory.Krypton.Toolkit;

namespace TECassist
{
    public partial class ProdRef : KryptonForm
    {
        Database myDBase;
        public static string Ação;

        public ProdRef(Database myDBase)
        {
            InitializeComponent();
            this.myDBase = myDBase;
        }

        private void Form_Load(object sender, EventArgs e)
        {
            janRefer.Parent = janPesq; 
            janRefer.Location = new Point(17, 97);
            if (Ação == "Ver")
            {
                txRefere.Visible = false;
                txRefPesq.Parent = janPesq;
                txRefPesq.Location = new Point(154, 22);
                txRefPesq.Visible = true;
            }
            else janRefer.Visible = true;
        }

        private void listaRefer_DoubleClick(object sender, EventArgs e)
        {
            int qRow =listaRefer.CurrentRow.Index;
            if (qRow < 0) return;
            DialogResult resp = MessageBox.Show("Deseja excluir\na referência: "
                + listaRefer.Rows[qRow].Cells[0].Value.ToString() + " ?",
                "   Excluir Referência", MessageBoxButtons.YesNo);
            if (resp == DialogResult.No) return;
            Refer regRefer = new Refer(myDBase);
            regRefer.Código = txProduto.Text;
            regRefer.Refere = listaRefer.Rows[qRow].Cells[0].Value.ToString();
            int dbRet = regRefer.Delete();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft\n"
                    + "referência: " + this.Name + "ExcluirRef\n" + regRefer.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            listaRefer.Rows.RemoveAt(qRow);
            infoOK.Visible = true;
            Pulso.Enabled = true;
        }

        private void listaRefer_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Space) listaRefer_DoubleClick(null, null);
        }

        private void txProduto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                Produto regProd = new Produto (myDBase );
                regProd .Código =txProduto .Text ;
                int dbRet = regProd.Existe();
                if (dbRet > 1)
                {
                    MessageBox.Show("Favor avisar a RamaSoft\n"
                        + "referência: " + this.Name + "VerProd\n" + regProd.MsgErro,
                        "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                if (dbRet == 0)
                {
                    MessageBox.Show("Código Inexistente", "   Favor Corrigir");
                    return;
                }
                dbRet = regProd.Obter();
                if (dbRet != 0)
                {
                    MessageBox.Show("Favor avisar a RamaSoft\n"
                        + "referência: " + this.Name + "ObterProd\n" + regProd.MsgErro,
                        "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                txDescr.Text = regProd.Detalhe;
                janRefer.Visible = true;
                txRefPesq.Text = "";
                listaRefer.Rows.Clear(); 
                Referes rolRefer = new Referes(myDBase);
                rolRefer.Código = txProduto.Text;
                dbRet = rolRefer.ListaRef();
                if (dbRet != 0)
                {
                    MessageBox.Show("Favor avisar a RamaSoft\n"
                        + "referência: " + this.Name + "ListaProd\n" + rolRefer.MsgErro,
                        "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                for (int nn = 0; nn < rolRefer.Items.Count; nn++)
                {
                    listaRefer.Rows.Add(rolRefer.Items[nn].Refere.ToString());
                }
                if (rolRefer.Items.Count > 1) listaRefer.Sort(refRefer, ListSortDirection.Ascending); 
                if (Ação == "Nova") txRefere.Focus();
            }
        }

        private void txRefere_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                string auxRefer = txRefere.Text.Trim();
                if (auxRefer.Length > 3)
                {
                    for (int nn = 0; nn < listaRefer.Rows.Count; nn++)
                    {
                        string auxAnter = listaRefer.Rows[nn].Cells[0].Value.ToString();
                        if (auxAnter.Trim() == auxRefer)
                        {
                            MessageBox.Show("Referência já existe\npara este produto", "   Favor Corrigir");
                            return;
                        }
                    }
                }
                Refer regRefer = new Refer(myDBase);
                regRefer.Código = txProduto.Text;
                regRefer.Refere = txRefere.Text;
                int dbRet = regRefer.Insert();
                if (dbRet != 0)
                {
                    MessageBox.Show("Favor avisar a RamaSoft\n"
                        + "referência: " + this.Name + "NovaRef\n" + regRefer.MsgErro,
                        "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                listaRefer.Rows.Add(txRefere.Text);
                listaRefer.Sort(refRefer, ListSortDirection.Ascending);
                infoOK.Visible = true;
                txRefere.Text = "";
                Pulso.Enabled = true;
            }
        }

        private void Pulso_Tick(object sender, EventArgs e)
        {
            Pulso.Enabled = false;
            infoOK.Visible = false;
            infoNotFound.Visible = false;
        }

        private void cmdVoltar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void txPesq_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                txProduto.Text = "";
                txRefPesq.Text = "";
                listaProds.Rows.Clear();
                Produtos rolProd = new Produtos(myDBase);
                if (txPesq.Text.EndsWith("*"))
                {
                    int pox = txPesq.Text.LastIndexOf("*");
                    rolProd.Detalhe = "%" + txPesq.Text.Substring(0, pox) + "%";
                }
                else rolProd.Detalhe = txPesq.Text + "%";
                int dbRet = rolProd.ListaLike();
                if (dbRet != 0)
                {
                    MessageBox.Show("Favor avisar a RamaSoft\n"
                        + "referência: " + this.Name + "RolProd\n" + rolProd.MsgErro,
                        "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                for (int idx = 0; idx < rolProd.Items.Count; idx++)
                {
                    listaProds.Rows.Add(rolProd.Items[idx].Código.ToString(), rolProd.Items[idx].Detalhe.ToString());
                }
                if (listaProds.Rows.Count > 0)
                {
                    listaProds.Sort(prodDescr, ListSortDirection.Ascending);
                    listaProds.Visible = true;
                    janRefer.Visible = false;
                    txPesq.Text = "";
                    listaProds.Focus();
                }
                else
                {
                    txPesq.Focus();
                    SendKeys.Send("{HOME}+{END}");
                }
            }
        }

        private void listaProds_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Space) listaProds_DoubleClick(null, null);
        }

        private void listaProds_DoubleClick(object sender, EventArgs e)
        {
            if (listaProds.CurrentRow.Index < 0) return;
            txProduto.Text = listaProds.CurrentRow.Cells[0].Value.ToString();
            janRefer.Visible = true;
            listaProds.Visible = false;
            txProduto.Focus();
            SendKeys.Send("{END}+{ENTER}");
        }

        private void txRefPesq_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar != (char)Keys.Enter) || (txRefPesq.Text.Trim().Length < 3)) return;
            txProduto.Text = "";
            janRefer.Visible = false;
            Referes rolRefer = new Referes(myDBase);
            rolRefer.Refere = txRefPesq.Text;
            int dbRet = rolRefer.ListaProd();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft\n"
                    + "referência: " + this.Name + "RefPesq\n" + rolRefer.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            listaProds.Rows.Clear();
            for (int nm = 0; nm < rolRefer.Items.Count; nm++)
            {
                Produto regProd = new Produto(myDBase);
                regProd.Código = rolRefer.Items[nm].Código;
                dbRet = regProd.Obter();
                if (dbRet != 0)
                {
                    MessageBox.Show("Favor avisar a RamaSoft\n"
                        + "referência: " + this.Name + "ObterProd\n" + rolRefer.MsgErro,
                        "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                listaProds.Rows.Add(regProd.Código.ToString(), regProd.Detalhe.ToString());
            }
            if (listaProds.Rows.Count > 0)
            {
                listaProds.Sort(prodDescr, ListSortDirection.Ascending);
                listaProds.Visible = true;
                janRefer.Visible = false;
                txPesq.Text = "";
                listaProds.Focus();
            }
            else
            {
                infoNotFound.Visible = true;
                Pulso.Enabled = true;
                txRefPesq.Focus();
            }
        }
    }
}
